/*
 * jQuery Nivo Slider v2.6

 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * March 2010
 */

(function($){
	var NivoSlider=function(element,options){
		var settings=$.extend({},$.fn.nivoSlider.defaults,options);
		var vars={currentSlide:0,currentImage:'',totalSlides:0,randAnim:'',running:false,paused:false,stop:false};
		var slider=$(element);
		slider.data('nivo:vars',vars);
		slider.css('position','relative');
		slider.addClass('nivoSlider');
		var kids=slider.children();
		kids.each(function(){
			var child=$(this);
			var link='';
			if(!child.is('img')){
				if(child.is('a')){
					child.addClass('nivo-imageLink');link=child;
				}
				child=child.find('img:first');
			}
			var childWidth=child.width();
			if(childWidth==0)childWidth=child.attr('width');
			var childHeight=child.height();
			if(childHeight==0)childHeight=child.attr('height');
			if(childWidth>slider.width()){
				slider.width(childWidth);
			}
			if(childHeight>slider.height()){
				slider.height(childHeight);
			}
			if(link!=''){
				link.css('display','none');
			}
			child.css('display','none');
			vars.totalSlides++;
		});
		
		if(settings.startSlide>0){
			if(settings.startSlide>=vars.totalSlides)settings.startSlide=vars.totalSlides-1;
			vars.currentSlide=settings.startSlide;
		}
		if($(kids[vars.currentSlide]).is('img')){
			vars.currentImage=$(kids[vars.currentSlide]);
		}else{
			vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
		}
		if($(kids[vars.currentSlide]).is('a')){
			$(kids[vars.currentSlide]).css('display','block');
		}
		slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
		slider.append($('<div class="nivo-caption"><p></p></div>').css({
			display:'none',opacity:settings.captionOpacity
		}));
		var processCaption=function(settings){
			var nivoCaption=$('.nivo-caption',slider);
			if(vars.currentImage.attr('title')!=''&&vars.currentImage.attr('title')!=undefined){
				var title=vars.currentImage.attr('title');
				if(title.substr(0,1)=='#')title=$(title).html();
				if(nivoCaption.css('display')=='block'){
					nivoCaption.find('p').fadeOut(settings.animSpeed,function(){
						$(this).html(title);
						$(this).fadeIn(settings.animSpeed);
					});
				}else{
					nivoCaption.find('p').html(title);
				}
				nivoCaption.fadeIn(settings.animSpeed);
			}else{
				nivoCaption.fadeOut(settings.animSpeed);
			}
		}
		processCaption(settings);
		var timer=0;
		if(!settings.manualAdvance&&kids.length>1){
			timer=setInterval(function(){
				nivoRun(slider,kids,settings,false);
			},settings.pauseTime);
		}
		if(settings.directionNav){
			slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+settings.prevText+'</a><a class="nivo-nextNav">'+settings.nextText+'</a></div>');
			if(settings.directionNavHide){
				$('.nivo-directionNav',slider).hide();
				slider.hover(function(){
					$('.nivo-directionNav',slider).show();
				},function(){
					$('.nivo-directionNav',slider).hide();
				});
			}
			$('a.nivo-prevNav',slider).live('click',function(){
				if(vars.running)return false;
				clearInterval(timer);
				timer='';
				vars.currentSlide-=2;
				nivoRun(slider,kids,settings,'prev');
				
			});
			$('a.nivo-nextNav',slider).live('click',function(){
				if(vars.running)return false;
				clearInterval(timer);
				timer='';
				nivoRun(slider,kids,settings,'next');}
			);
		}
		if(settings.controlNav){
			var nivoControl=$('<div class="nivo-controlNav"></div>');
			slider.append(nivoControl);
			for(var i=0;i<kids.length;i++){
				if(settings.controlNavThumbs){
					var child=kids.eq(i);
					if(!child.is('img')){
						child=child.find('img:first');
					}
					if(settings.controlNavThumbsFromRel){
						nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('rel')+'" alt="" /></a>');
					}else{
						nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('src').replace(settings.controlNavThumbsSearch,settings.controlNavThumbsReplace)+'" alt="" /></a>');
					}
				}else{
					nivoControl.append('<a class="nivo-control" rel="'+i+'">'+(i+1)+'</a>');
				}
			}
			$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
			$('.nivo-controlNav a',slider).live('click',function(){
				if(vars.running)return false;
				if($(this).hasClass('active'))return false;
				clearInterval(timer);
				timer='';
				slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
				vars.currentSlide=$(this).attr('rel')-1;nivoRun(slider,kids,settings,'control');
			});
		}
		if(settings.keyboardNav){
			$(window).keypress(function(event){
				if(event.keyCode=='37'){
					if(vars.running)return false;
					clearInterval(timer);
					timer='';
					vars.currentSlide-=2;
					nivoRun(slider,kids,settings,'prev');
				}
				if(event.keyCode=='39'){
					if(vars.running)return false;
					clearInterval(timer);
					timer='';
					nivoRun(slider,kids,settings,'next');
				}
			});
		}
		if(settings.pauseOnHover){
			slider.hover(function(){
				vars.paused=true;
				clearInterval(timer);timer='';
			},function(){
				vars.paused=false;
				if(timer==''&&!settings.manualAdvance){
					timer=setInterval(function(){
						nivoRun(slider,kids,settings,false);
					},settings.pauseTime);
				}
			});
		}
		slider.bind('nivo:animFinished',function(){
			vars.running=false;
			$(kids).each(function(){
				if($(this).is('a')){
					$(this).css('display','none');
				}
			});
			if($(kids[vars.currentSlide]).is('a')){
				$(kids[vars.currentSlide]).css('display','block');
			}
			if(timer==''&&!vars.paused&&!settings.manualAdvance){
				timer=setInterval(function(){
					nivoRun(slider,kids,settings,false);
				},settings.pauseTime);
			}
			settings.afterChange.call(this);
		});
		var createSlices=function(slider,settings,vars){
			for(var i=0;i<settings.slices;i++){
				var sliceWidth=Math.round(slider.width()/settings.slices);
				if(i==settings.slices-1){
					slider.append($('<div class="nivo-slice"></div>').css({left:(sliceWidth*i)+'px',width:(slider.width()-(sliceWidth*i))+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));
				}else{
					slider.append($('<div class="nivo-slice"></div>').css({
						left:(sliceWidth*i)+'px',width:sliceWidth+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'
					}));
				}
			}
		}
		var createBoxes=function(slider,settings,vars){
			var boxWidth=Math.round(slider.width()/settings.boxCols);
			var boxHeight=Math.round(slider.height()/settings.boxRows);
			for(var rows=0;rows<settings.boxRows;rows++){
				for(var cols=0;cols<settings.boxCols;cols++){
					if(cols==settings.boxCols-1){
						slider.append($('<div class="nivo-box"></div>').css({
							opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:(slider.width()-(boxWidth*cols))+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));
					}else{
						slider.append($('<div class="nivo-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:boxWidth+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'
						}));
					}
				}
			}
		}
		var nivoRun=function(slider,kids,settings,nudge){
			var vars=slider.data('nivo:vars');
			if(vars&&(vars.currentSlide==vars.totalSlides-1)){
				settings.lastSlide.call(this);
			}
			if((!vars||vars.stop)&&!nudge)return false;
			settings.beforeChange.call(this);
			if(!nudge){
				slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
			}else{
				if(nudge=='prev'){
					slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
				}
				if(nudge=='next'){
					slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
				}
			}
			vars.currentSlide++;
			if(vars.currentSlide==vars.totalSlides){
				vars.currentSlide=0;
				settings.slideshowEnd.call(this);
			}
			if(vars.currentSlide<0)vars.currentSlide=(vars.totalSlides-1);
			if($(kids[vars.currentSlide]).is('img')){
				vars.currentImage=$(kids[vars.currentSlide]);
			}else{
				vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
			}
			if(settings.controlNav){
				$('.nivo-controlNav a',slider).removeClass('active');
				$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
			}
			processCaption(settings);
			$('.nivo-slice',slider).remove();
			$('.nivo-box',slider).remove();
			if(settings.effect=='random'){
				var anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade','boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
				vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))];
				if(vars.randAnim==undefined)vars.randAnim='fade';
			}
			if(settings.effect.indexOf(',')!=-1){
				var anims=settings.effect.split(',');
				vars.randAnim=anims[Math.floor(Math.random()*(anims.length))];
				if(vars.randAnim==undefined)vars.randAnim='fade';
			}
			vars.running=true;
			if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft'){
				createSlices(slider,settings,vars);
				var timeBuff=0;
				var i=0;
				var slices=$('.nivo-slice',slider);
				if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')slices=$('.nivo-slice',slider)._reverse();
				slices.each(function(){
					var slice=$(this);
					slice.css({'top':'0px'});
					if(i==settings.slices-1){
						setTimeout(function(){
							slice.animate({
								height:'100%',opacity:'1.0'
							},settings.animSpeed,'',function(){
								slider.trigger('nivo:animFinished');
							});
						},(100+timeBuff));
					}else{
						setTimeout(function(){
							slice.animate({
								height:'100%',opacity:'1.0'
								},settings.animSpeed);
						},(100+timeBuff));
					}
					timeBuff+=50;i++;
				});
			}
			else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft'){
				createSlices(slider,settings,vars);
				var timeBuff=0;
				var i=0;
				var slices=$('.nivo-slice',slider);
				if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')slices=$('.nivo-slice',slider)._reverse();
				slices.each(function(){
					var slice=$(this);
					slice.css({'bottom':'0px'});
					if(i==settings.slices-1){
						setTimeout(function(){
							slice.animate({
								height:'100%',opacity:'1.0'
							},settings.animSpeed,'',function(){
								slider.trigger('nivo:animFinished');
							});
						},(100+timeBuff));
					}else{
						setTimeout(function(){
							slice.animate({
								height:'100%',opacity:'1.0'
							},settings.animSpeed);
						},(100+timeBuff));
					}
					timeBuff+=50;i++;
				});
			}
			else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft'){
				createSlices(slider,settings,vars);
				var timeBuff=0;
				var i=0;
				var v=0;
				var slices=$('.nivo-slice',slider);
				if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')slices=$('.nivo-slice',slider)._reverse();
				slices.each(function(){
					var slice=$(this);
					if(i==0){
						slice.css('top','0px');
						i++;
					}else{
						slice.css('bottom','0px');
						i=0;
					}
					if(v==settings.slices-1){
						setTimeout(function(){
							slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){
								slider.trigger('nivo:animFinished');
							});
						},(100+timeBuff));
					}else{
						setTimeout(function(){
							slice.animate({
								height:'100%',opacity:'1.0'
							},settings.animSpeed);
						},(100+timeBuff));
					}
					timeBuff+=50;v++;
				});
			}
			else if(settings.effect=='fold'||vars.randAnim=='fold'){
				createSlices(slider,settings,vars);
				var timeBuff=0;
				var i=0;
				$('.nivo-slice',slider).each(function(){
					var slice=$(this);
					var origWidth=slice.width();
					slice.css({
						top:'0px',height:'100%',width:'0px'
					});
					if(i==settings.slices-1){
						setTimeout(function(){
							slice.animate({
								width:origWidth,opacity:'1.0'
							},settings.animSpeed,'',function(){
								slider.trigger('nivo:animFinished');
							});
						},(100+timeBuff));
					}else{
						setTimeout(function(){
							slice.animate({
								width:origWidth,opacity:'1.0'
							},settings.animSpeed);
						},(100+timeBuff));
					}
					timeBuff+=50;i++;
				});
			}
			else if(settings.effect=='fade'||vars.randAnim=='fade'){
				createSlices(slider,settings,vars);
				var firstSlice=$('.nivo-slice:first',slider);
				firstSlice.css({'height':'100%','width':slider.width()+'px'});
				firstSlice.animate({opacity:'1.0'},(settings.animSpeed*2),'',function(){
					slider.trigger('nivo:animFinished');
				});
			}
			else if(settings.effect=='slideInRight'||vars.randAnim=='slideInRight'){
				createSlices(slider,settings,vars);
				var firstSlice=$('.nivo-slice:first',slider);
				firstSlice.css({'height':'100%','width':'0px','opacity':'1'});
				firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){
					slider.trigger('nivo:animFinished');
				});
			}
			else if(settings.effect=='slideInLeft'||vars.randAnim=='slideInLeft'){
				createSlices(slider,settings,vars);
				var firstSlice=$('.nivo-slice:first',slider);
				firstSlice.css({'height':'100%','width':'0px','opacity':'1','left':'','right':'0px'});
				firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){
					firstSlice.css({'left':'0px','right':''});
					slider.trigger('nivo:animFinished');
				});
			}
			else if(settings.effect=='boxRandom'||vars.randAnim=='boxRandom'){
				createBoxes(slider,settings,vars);
				var totalBoxes=settings.boxCols*settings.boxRows;
				var i=0;
				var timeBuff=0;
				var boxes=shuffle($('.nivo-box',slider));
				boxes.each(function(){
					var box=$(this);
					if(i==totalBoxes-1){
						setTimeout(function(){
							box.animate({opacity:'1'},settings.animSpeed,'',function(){
								slider.trigger('nivo:animFinished');
							});
						},(100+timeBuff));
					}else{
						setTimeout(function(){
							box.animate({opacity:'1'},settings.animSpeed);},(100+timeBuff));
					}
					timeBuff+=20;i++;
				});
			}
			else if(settings.effect=='boxRain'||vars.randAnim=='boxRain'||settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
					createBoxes(slider,settings,vars);
					var totalBoxes=settings.boxCols*settings.boxRows;
					var i=0;
					var timeBuff=0;
					var rowIndex=0;
					var colIndex=0;
					var box2Darr=new Array();
					box2Darr[rowIndex]=new Array();
					var boxes=$('.nivo-box',slider);
					if(settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
						boxes=$('.nivo-box',slider)._reverse();
					}
					boxes.each(function(){
						box2Darr[rowIndex][colIndex]=$(this);
						colIndex++;
						if(colIndex==settings.boxCols){
							rowIndex++;colIndex=0;box2Darr[rowIndex]=new Array();
						}
					});
					for(var cols=0;cols<(settings.boxCols*2);cols++){
						var prevCol=cols;
						for(var rows=0;rows<settings.boxRows;rows++){
							if(prevCol>=0&&prevCol<settings.boxCols){
								(function(row,col,time,i,totalBoxes){
									var box=$(box2Darr[row][col]);
									var w=box.width();
									var h=box.height();
									if(settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){
										box.width(0).height(0);
									}
									if(i==totalBoxes-1){
										setTimeout(function(){
											box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3,'',function(){
												slider.trigger('nivo:animFinished');
											});
										},(100+time));
									}else{
										setTimeout(function(){
											box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3);
										},(100+time));
									}
								})
								(rows,prevCol,timeBuff,i,totalBoxes);
								i++;
							}
							prevCol--;
						}
						timeBuff+=100;
					}
				}
			}
			var shuffle=function(arr){
				for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);
				return arr;
			}
			var trace=function(msg){
				if(this.console&&typeof console.log!="undefined")
					console.log(msg);
			}
			this.stop=function(){
				if(!$(element).data('nivo:vars').stop){
					$(element).data('nivo:vars').stop=true;
					trace('Stop Slider');
				}
			}
			this.start=function(){
				if($(element).data('nivo:vars').stop){
					$(element).data('nivo:vars').stop=false;
					trace('Start Slider');
				}
			}
			settings.afterLoad.call(this);
			return this;
		};
		$.fn.nivoSlider=function(options){
			return this.each(function(key,value){
				var element=$(this);
				if(element.data('nivoslider'))return element.data('nivoslider');
				var nivoslider=new NivoSlider(this,options);
				element.data('nivoslider',nivoslider);
			});
		};
		$.fn.nivoSlider.defaults={
				effect:'random',
						slices:15,
						boxCols:8,
						boxRows:4,
						animSpeed:500,
						pauseTime:5000,
						startSlide:0,
						directionNav:true,
						directionNavHide:true,
						controlNav:true,
						controlNavThumbs:false,
						controlNavThumbsFromRel:false,
						controlNavThumbsSearch:'.jpg',
						controlNavThumbsReplace:'_thumb.jpg',
						keyboardNav:true,
						pauseOnHover:true,
						manualAdvance:false,
						captionOpacity:0.8,
						prevText:'Prev',
						nextText:'Next',
						beforeChange:function(){},
						afterChange:function(){},
						slideshowEnd:function(){},
						lastSlide:function(){},
						afterLoad:function(){}
		};
		$.fn._reverse=[].reverse;
	})(jQuery);